multiclass multioutput
分類問題
各サンプルの目的変数が2つ以上のクラスラベルのoutputから構成される
各outputは利用可能なクラスの固定された集合を持つ
各サンプルは、各outputにつき、1つのクラスのラベルが付く
下の1つ目の例
outputの1番目が {1, 3} から振られている
outputの2番目が {1, 2} から振られている
An output may be binary or multiclass, and in the case where all outputs are binary, the target is multilabel.
→ multilabelがspecificなmulticlass multioutputと言われる由縁
目的変数は、複数のマルチクラスの目的変数として表される
(マルチクラスは2値分類ではなく、3つ以上のクラスから1つ選ぶ)
arrayのshapeは (n_samples, n_outputs)(下の例参照)
単純さから、multiclass multioutputには整数のクラスラベルが使われるべき
文字列のクラスラベルは常にサポートするとは限らない
estimatorのmultioutput(引数?)TODO
type_of_target が ‘multiclass-multioutput’ を返す
a 2d array that contains more than two discrete values, is not a sequence of sequences, and both dimensions are of size > 1.
code:python
>> import numpy as np
>> from sklearn.utils.multiclass import type_of_target
>> type_of_target(np.array(1, 2], [3, 1)) # shape (2, 2): 2つのサンプル、2つのoutput
'multiclass-multioutput'
>> type_of_target(np.array(1, 2], 3, 1, [2, 1)) # shape (3, 2): 3つのサンプル、2つのoutput 'multiclass-multioutput'
>> # サンプルごとにラベルの長さが揃っている必要あり。2を1,2,3に変えても同様のエラー >> type_of_target(np.array(1, 2], 3, 1, [2)) <stdin>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../venv/lib/python3.8/site-packages/sklearn/utils/multiclass.py", line 263, in type_of_target
raise ValueError('You appear to be using a legacy multi-label data'
ValueError: You appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead - the MultiLabelBinarizer transformer can convert to this format.
>> # MultiLabelBinarizer を使えば、ラベルの長さは揃う